@echo off
echo "==>TAO_ROOT=%TAO_ROOT%"
set PROJECT_PATH="%TAO_ROOT%/orbsvcs/tests/FT_Naming/FaultTolerant"
cd %PROJECT_PATH%


::1) Create empty NameService and GroupService directories
rmdir /s /q NameService
rmdir /s /q GroupService

mkdir NameService
mkdir GroupService

cacls NameService /e /g everyone:f
cacls GroupService /e /g everyone:f



@echo off
setlocal

:: 定义要删除的文件列表
set "files=ns_backup.ior nm_backup.ior nm_primary.ior nm_backup.ior ns_multi_profile.ior nm_multi_profile.ior"

:: 遍历文件列表并删除存在的文件
for %%f in (%files%) do (
    if exist "%%f" (
        echo Deleting %%f...
        del "%%f"
        if not errorlevel 1 (
            echo Deleted %%f successfully.
        ) else (
            echo Error deleting %%f.
        )
    ) else (
        echo %%f does not exist. Skipping.
    )
)

timeout /t 2

:: PRIMARY 设置ip 和端口 
set "PRIMARY_IP_PORT=OMEN_2023:26295" 
echo "==>primary current ip  and  port is %PRIMARY_IP_PORT%"

::BACKUP 设置ip 和端口 
set "BACKUP_IP_PORT=OMEN_2023:30067" 
echo "==>backup current ip  and  port is %BACKUP_IP_PORT%"


::启动主命名服务
echo "==>start Start primary tao_ft_naming process iiop://%PRIMARY_IP_PORT%"
start "primary_tao_ft_naming" cmd /k "%TAO_ROOT%/orbsvcs/FT_Naming_Service/tao_ft_naming --primary -ORBDebugLevel 0 -ORBListenEndPoints iiop://%PRIMARY_IP_PORT%  -o %PROJECT_PATH%/ns_primary.ior -h %PROJECT_PATH%/nm_primary.ior -r NameService -v GroupService"

timeout /t 4

::启动备命名服务
echo "==>Start backup tao_ft_naming process --primary iiop://%BACKUP_IP_PORT%"
start "backup_tao_ft_naming" cmd /k "%TAO_ROOT%/orbsvcs/FT_Naming_Service/tao_ft_naming --backup -ORBDebugLevel 0 -ORBListenEndPoints iiop://%BACKUP_IP_PORT% -o %PROJECT_PATH%/ns_backup.ior -h %PROJECT_PATH%/nm_backup.ior -c %PROJECT_PATH%/ns_multi.ior -g %PROJECT_PATH%/nm_multi.ior -r NameService -v GroupService"


timeout /t 3
echo  "==>Start client  --equivalence"
::6) 重启客户端 参数有变化 --equivalence
set /p user_choice=please input(1 to start the client):
if "%user_choice%"=="1" (
	start "client" cmd /k "client --equivalence -ORBDebugLevel 0 -p file://ns_primary.ior  -q file://ns_backup.ior -r file://nm_primary.ior  -s file://nm_backup.ior -b 4 -d 4"
) 

pause >nul

@echo off


@REM 这条命令是用于启动 TAO 的故障副本命名服务（FT Naming Service）的备份实例。让我来解释每个选项的含义：

@REM - **`$TAO_ROOT/orbsvcs/FT_Naming_Service/tao_ft_naming`**: 这是故障副本命名服务的可执行文件路径。

@REM - **`--backup`**: 指定此实例作为备份命名服务运行，而不是主要的主命名服务。备份命名服务将等待主命名服务出现故障时接管。

@REM - **`-ORBListenEndPoints iiop://<hostname>:<port2>`**: 指定备份命名服务监听的 IIOP 端点地址，其中 `<hostname>` 是主机名，`<port2>` 是端口号。这是客户端连接到备份命名服务的地址。

@REM - **`-o /tmp/ns_backup.ior`**: 指定一个文件来存储此备份命名服务的主 Naming Service 上下文的IOR（Interoperable Object Reference）。

@REM - **`-h /tmp/nm_backup.ior`**: 指定一个文件来存储此备份命名服务的命名管理器的IOR。

@REM - **`-c /tmp/ns_multi_profile.ior`**: 指定一个文件来存储包含此备份命名服务主 Naming Service 上下文和对等命名服务上下文的多配置文件IOR。

@REM - **`-g /tmp/nm_multi_profile.ior`**: 指定一个文件来存储包含此备份命名服务命名管理器和对等命名管理器的多配置文件IOR。

@REM - **`-r NameService`**: 指定用于冗余平面文件持久性的目录，该目录用于存储命名上下文的数据。此处的 `NameService` 是目录的路径。

@REM - **`-v GroupService`**: 指定用于对象组冗余平面持久性的目录，该目录用于存储对象组的数据。此处的 `GroupService` 是目录的路径。

@REM - **`&`**: 将命令置于后台运行，以便在启动后可以继续使用控制台。

@REM ### 解释

@REM 这条命令的目的是启动一个 TAO 的故障副本命名服务（FT Naming Service）的备份实例。备份实例具有以下任务和配置：

@REM 1. **备份角色**: 指定 `--backup` 选项将此实例配置为备份命名服务，即在主命名服务出现故障时接管其功能。

@REM 2. **IOR 文件**: 使用 `-o`、`-h`、`-c` 和 `-g` 选项分别指定了四个不同的文件路径，用于存储与此备份实例相关的不同配置文件的IOR。这些文件包括主 Naming Service 上下文的IOR、命名管理器的IOR，以及包含多个配置文件的IOR，用于备份命名服务的配置。

@REM 3. **持久性目录**: 使用 `-r` 和 `-v` 选项分别指定了两个不同的目录路径，用于命名上下文数据和对象组数据的冗余平面文件持久性。

@REM 4. **后台运行**: 最后的 `&` 符号将命令放置到后台运行，以便在启动后可以继续使用当前控制台。

@REM 通过这些选项和配置，该命令启动了一个故障副本命名服务的备份实例，为应对主命名服务故障提供了高可用性和容错性。